﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;

namespace _02_线程池
{
    // 线程池 是一个线程管理的容器 
    // 在频繁创建新的线程(new Thread)时比较消耗性能, 使用线程池可以管理我们创建的线程，实现线程的复用，节省性能 
    internal class Program
    {
        static void Main(string[] args)
        {
            for (int i = 0; i < 10; i++)
            {
                Thread.Sleep(500);
                //CreateThread();

                CreateThreadPool();
            }
            Console.ReadLine();
        }
        static void CreateThread()
        {
            Thread thread = new Thread(() =>
            {
                // ManagedThreadId 是线程的唯一标识符
                // Thread.CurrentThread 获取当前线程
                Console.WriteLine($"创建了一个线程id是{Thread.CurrentThread.ManagedThreadId}");
            });
            thread.Start();
        }

        static void CreateThreadPool()
        {
            // 创还能线程池
            /*
            bool 创建线程成功或者失败的结果 = ThreadPool.QueueUserWorkItem((线程接收的参数) =>
            {

            }, 给线程传递的参数);
            */

            // QueueUserWorkItem 会将任务添加到线程池中 动态分配线程 
            ThreadPool.QueueUserWorkItem((o) =>
            {
                Console.WriteLine(o); // 123
                // 线程执行的逻辑
                Console.WriteLine($"创建了一个线程id是{Thread.CurrentThread.ManagedThreadId}");
               
            }, "123");
            ThreadPool.SetMaxThreads(5, 5); // 设置最大线程数
            ThreadPool.SetMinThreads(2, 2); // 设置最小线程数
        }
    }
}


